package com.rc.web.mapper;

import com.mybatisflex.core.BaseMapper;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.rc.pojo.dto.question.QuestionQuery;
import com.rc.pojo.po.Question;
import com.rc.pojo.vo.question.QuestionPageVO;

import java.util.List;

import static com.rc.pojo.po.table.QuestionTableDef.QUESTION;

/**
 * 问题表 映射层。
 * 提供问题相关的数据库操作接口
 */
public interface QuestionMapper extends BaseMapper<Question> {

    /**
     * 根据植物ID和病害ID查询问题列表
     * @param plantId 植物ID
     * @param illId 病害ID
     * @return 问题列表
     */
    default List<Question> selectByPlantId(Long plantId, Long illId) {
        return selectListByQuery(QueryWrapper.create()
                .where(QUESTION.PLANT_ID.eq(plantId))
                .or(QUESTION.ILL_ID.eq(illId))
        );
    }

    /**
     * 根据病害ID查询问题列表
     * @param illId 病害ID
     * @return 问题列表
     */
    default List<Question> selectByIllId(Long illId){
        return selectListByQuery(QueryWrapper.create()
                .where(QUESTION.ILL_ID.eq(illId))
        );
    }

    /**
     * 分页查询问题
     * @param query 分页查询条件
     * @return 分页结果
     */
    default Page<QuestionPageVO> selectPage(QuestionQuery query){
        return paginateAs(query.getCurrent(),query.getPageSize(), QueryWrapper.create()
                        .where(QUESTION.PLANT_ID.eq(query.getPlantId()))
                        .orderBy(QUESTION.QUE_INDEX.asc())
        , QuestionPageVO.class);
    }

    /**
     * 根据植物ID和病害ID删除问题
     * @param plantId 植物ID
     * @param illId 病害ID
     */
    default void deleteByPlantId(Long plantId, Long illId) {
        deleteByQuery(QueryWrapper.create()
                .where(QUESTION.PLANT_ID.eq(plantId))
                .or(QUESTION.ILL_ID.eq(illId))
        );
    }
}
